package w.z.x.framework.repository.interfaces;

import java.io.Serializable;

/**
 * 方法条件
 *
 * @author 魏祖潇
 */
public interface Func<Child, R> extends Serializable {

    /**
     * 排序
     *
     * @param condition 是否拼接
     * @param isAsc     是否升序
     * @param r         字段
     * @return Wrapper
     */
    Child orderBy(boolean condition, boolean isAsc, R... r);

    /**
     * 排序
     *
     * @param isAsc 是否升序
     * @param r     字段
     * @return Wrapper
     */
    default Child orderBy(boolean isAsc, R... r) {
        return orderBy(true, isAsc, r);
    }

    /**
     * 升序
     *
     * @param r 字段
     * @return Wrapper
     */
    default Child orderByAsc(R... r) {
        return orderByAsc(true, r);
    }

    /**
     * 升序
     *
     * @param condition 是否拼接
     * @param r         字段
     * @return Wrapper
     */
    default Child orderByAsc(boolean condition, R... r) {
        return orderBy(condition, true, r);
    }

    /**
     * 降序
     *
     * @param r 字段
     * @return Wrapper
     */
    default Child orderByDesc(R... r) {
        return orderByDesc(true, r);
    }

    /**
     * 降序
     *
     * @param condition 是否拼接
     * @param r         字段
     * @return Wrapper
     */
    default Child orderByDesc(boolean condition, R... r) {
        return orderBy(condition, false, r);
    }

}
